package com.my.study.jvm;

/**
 * @author Carlos
 * @version 1.0
 * @Description
 * @date 2021/8/8 13:36
 **/
public class StringTableTest {

    /**
     * 常量池中的信息都会被加载到运行时常量池中。这个时候 a,b,ab都是常量池中的符号，还不是String对象
     * 当执行ldc #2，就会把 a符号变成 "a"字符串对象 => StringTable ["a"]
     *
     * 当执行ldc #3，就会把 b符号变成 "b"字符串对象 => StringTable ["a", "b"]
     *
     * 当执行ldc #4，就会把 b符号变成 "ab"字符串对象 => StringTable ["a", "b", "ab"]
     *
     */

    public static void main(String[] args) {
        String s1 = "a";
        String s2 = "b";
        String s3 = "ab";

        // new StringBuilder().append("a").append("b").toString()
        // s3==s4 -> false
        String s4 = s1 + s2;

        // 在编译期间的优化，结果已经在编译期确定为"ab"
        // s3==s5 -> true
        String s5 = "a" + "b";

        // new String("ab")
        String s6 = new String("a") + new String("b");
        String s7 = new String("ab");
        System.out.println(s3 == s6);
        System.out.println(s6 == s7);
    }


}
